package model;

import java.util.ArrayList;
import model.persistencia.TipoPagtoDAO;

public class TipoPagtoModel implements ITipoPagto{
    
    private int codigo;
    private String descricao;
    private TipoPagtoDAO tipoPagtoDAO;
    private ArrayList observers;
    private static TipoPagtoModel instance = null;

    public synchronized static TipoPagtoModel getInstance(){
        if (instance == null) {
            instance = new TipoPagtoModel();
        }
        return instance;
    }
        
    public TipoPagtoModel(){
        observers = new ArrayList();
        tipoPagtoDAO = new TipoPagtoDAO(this);       
    }
    
    public TipoPagtoModel(int codigo, String descricao) {
        this.codigo = codigo;
        this.descricao = descricao;        
        notificarObservers();
    }
    
    @Override
    public void setProximoCodigo(){
        int proximoCodigo = tipoPagtoDAO.getCodigo(SQL_ULTIMO,0) + 1;
        codigo = proximoCodigo;
    }
    
    @Override
    public TipoPagtoModel getTipoPagto(int codigo) {
        return tipoPagtoDAO.getObject(codigo);
    }
    
    @Override
    public ArrayList getAll() {
        return pesquisar(SQL_GETALL, "0");
    }
    
    //<editor-fold defaultstate="collapsed" desc="GET E SET METODOS">
    @Override
    public int getCodigo() {
        return codigo;
    }
    
    @Override
    public void setCodigo(int codigo) {
        this.codigo = codigo;
        
    }
    
    @Override
    public String getDescricao() {
        return descricao;
        
    }
    
    @Override
    public void setDescricao(String descricao) {
        this.descricao = descricao;
    }
    //</editor-fold>
    
    //<editor-fold defaultstate="collapsed" desc="GRUD">   
    @Override
    public void inserir(){
        tipoPagtoDAO.inserir();
        notificarObservers();
    }
    
    @Override
    public void atualizar(){
        tipoPagtoDAO.atualizar();
        notificarObservers();
    }
    
    @Override
    public void excluir(){
        tipoPagtoDAO.excluir();
        notificarObservers();
    }
    
    @Override
    public ArrayList pesquisar(int iOpcao, String iPesquisa) {
        return tipoPagtoDAO.pesquisar(iOpcao, iPesquisa);
    }
    //</editor-fold>
    
    //<editor-fold defaultstate="collapsed" desc="OBSERVER">
    @Override
    public void registrarObserver(Observer o) {
        observers.add(o);
    }
    
    @Override
    public void removerObserver(Observer o) {
        int i = observers.indexOf(o);
        if (i >= 0){
            observers.remove(i);
        }
    }
    
    @Override
    public void notificarObservers() {
        for (int i = 0;i < observers.size();i++){
            Observer observer = (Observer) observers.get(i);
            observer.update();
        }
    }
    //</editor-fold>
    
}

